Skip to content

Release v0.12.0 - #137

Open
esto-openscan wants to merge 23 commits into
mainfrom
develop
Open

Release v0.12.0#137
esto-openscan wants to merge 23 commits into
mainfrom
develop

Conversation

@esto-openscan

@esto-openscan esto-openscan commented Jul 28, 2026

Copy link
Copy Markdown
Member

This PR creates release v0.12.0

Notable changes:

  • rpi-imager repo works now for Raspberry Pi Model 3.
  • Fix motor stuttering in ScanTask when writing photos to SD-card.
  • Support for Raspberry Pi 5.
  • Improve example Tasks.
  • Introduce .deb packaging for a new update mechanism.
  • Fix various API inconsistencies (in next routers only).

esto-openscan and others added 23 commits May 26, 2026 08:45
fix: add Raspberry Pi 3 support to device manifests and OS sublists
- Skipped internal V4L2 pipeline devices during LinuxPy camera detection.
- Fix picamera2 setting application on Raspberry Pi 5.
- Updated diagnostics script.
- Added temporary release of camera controllers to support external probes in diagnostics.
- Enhanced unit tests to validate new diagnostic and configuration behaviors.
fix(camera): improve Raspberry Pi 5 camera detection and diagnostics
… to `hello_world_progress_task`

- Updated task name and functionality to align with the canonical async progress-reporting pattern.
- Simplified and removed outdated task implementations.
- Adjusted task registration, router methods, and documentation to reference `hello_world_progress_task`.
- Updated test cases to reflect the new structure and name.
refactor(example_tasks): clarification improvement
…124)

* fix(scan): await photo save so motor moves don't overlap encode/save

Each captured photo was saved fire-and-forget via
asyncio.create_task(self._ctx.project_manager.add_photo_async(photo_data)) in
ScanTask._capture_photos_at_position (both the single-photo and focus-stacking
branches), and the loop advanced to the next motors.move_to_point() without
awaiting it. The detached save (JPEG write + metadata + _recalculate_and_save_scan_size,
an os.walk over the growing scan dir) runs in the default ThreadPoolExecutor and
overlaps the motor's software time.sleep-timed GPIO step loop in
MotorController._executor. The two contend for CPU, step intervals overrun, and
steps drop. On an open-loop rig with no endstop this drifts the position estimate
by degrees, breaking homing and risking over-travel.

Await the save instead, serializing move -> capture -> save -> next move so the
motor only steps while the Pi is idle.

Verified on an OpenScan Mini (greenshield, IMX519, v0.11.4): audible scan growl
gone, scans complete, homing holds across runs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* chore(scan): shorten photo save comments

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: esto <esto@openscan.eu>
- Replaced `photo` with `photo_async` in `ScanTask` for asynchronous photo capture.
- Adjusted related test cases to mock and verify `photo_async` instead of `photo`.
- Ensured proper await usage for improved performance and stability during scan operations.
- Replaced `photo` with `photo_async` in `ScanTask` for asynchronous photo capture.
- Adjusted related test cases to mock and verify `photo_async` instead of `photo`.
- Ensured proper await usage for improved performance and stability during scan operations.
…istry

- Moved built-in core task definitions to a new `BUILTIN_TASKS` registry for centralized task management.
- Updated `initialize_core_tasks` to retrieve task definitions from the registry instead of hardcoded lists.
- Improved task validation to ensure uniqueness and explicit task names.
- Adjusted documentation and tests to align with the new registry-based approach.
feat(packaging): ship firmware as a Debian-managed runtime

- add Debian packaging with versioned releases, bundled wheelhouse installation,
  isolated virtual environments, and release metadata
- install and enable the production systemd service with robust shutdown and
  hardware cleanup behavior
- preserve runtime configuration across upgrades and seed missing default
  settings without replacing device-specific state
- delegate nginx and system-level integration to openscan3-system-config
- expose guarded system update, healthcheck, log, apply, and repair operations
  through the firmware API and openscan-updater CLI
- include camera diagnostics and packaging, migration, and API test coverage
- prepare the firmware runtime for the 0.12.0 APT-based release
…d-task-registry

# Conflicts:
#	docs/ARCHITECTURE.md
…istry

Simplify task registry and improve documentation, also regenerate openapi specs
…re (#135)

* refactor(update_api): simplify endpoints and improve response structure

- Introduced `read_user_update_status` and `refresh_user_update_status` for streamlined status handling.
- Removed unused endpoints (`/logs`, `/healthcheck`, `/openscan`).
- Consolidated error handling and standardized payload structure for clearer API responses.
- Added a compact cached update status (`update_status`) to the updater commands for faster status retrieval.
- Updated tests to reflect endpoint changes and new response structures.

* refactor(update_api): add explicit response schemas and regenerate OpenAPI specs

- Defined `UpdateStatusResponse`, `UpdateInstallResponse`, `SystemUpdateSummary`, and `OpenScanUpdate*` schemas to improve response clarity.
- Updated `/status`, `/check`, and `/apply` endpoints to explicitly use response models.
- Regenerated OpenAPI specs (`openapi_v0.9.json`, `openapi_latest.json`, `openapi_next.json`) to reflect schema updates.
- Enhanced test coverage for response model validation in update endpoint tests.
…s` endpoint

- Added `AvailableConfigResponse` and `AvailableConfigsResponse` models for consistent and clear API responses.
- Updated OpenAPI schema with references to the new response models.
- Enhanced tests to validate OpenAPI response schema and structure.
- Defined explicit response schema (`application/zip`) for the `/logs/archive` endpoint.
- Updated OpenAPI spec to reflect the response format and metadata.
- Extended tests to validate the new binary response handling.
…n `/next/projects` endpoints

- Introduced `ProjectCreateRequest` and `ScanCreateRequest` models for consistent JSON payload validation.
- Updated `/next/projects` and `/next/projects/{project_name}/scan` endpoints to require JSON request bodies.
- Regenerated OpenAPI specifications to reflect the new request body schema.
- Enhanced tests to validate the new JSON request handling and OpenAPI changes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants